字符串
由0个或多个字符组成的有序字符序列
单行字符串由一对单引号或一对双引号表示,如:”abc” 或 ‘abc’
多行字符串由三个单引号或三个双引号表示,如:’’’ Python
语言 ‘’’字符串是字符的有序序列,可以用序号访问
索引:s[N] 通过序号获取单个字符。如:”abc”[1]=”b” ; “abc”[-1]=”c”
切片:s[N:M:K] 获取M(含,缺省为0)到N(不含,缺省为len)的步径为K(缺省为1,-1时为倒序)的子串。
字符串支持转义字符
功能 | 使用 |
---|---|
转义符表达特定字符的本意 | “这里有个双引号(\”)” 结果为 这里有个双引号(“) |
转义符形成一些组合,表达一些不可打印的含义 | “\b”回退 “\n”换行(光标移动到下行首) “\r” 回车(光标移动到本行首) |
字符串前导符r表示raw string,不支持转义,常用于正则表达式。
字符串的编码方式
统一字符编码,即覆盖几乎所有字符的编码方式
从0到1114111 (0x10FFFF),每个编码对应一个字符
Python字符串中每个字符都是Unicode编码字符1
2
3
4"1 + 1 = 2" + chr(10004)
'1 + 1 = 2✔'
ord('♉')
9801字符串操作符
操作符及使用 | 描述 |
---|---|
x + y | 连接两个字符串x和y |
n x 或 x n | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
- 字符串操作函数
函数及使用 | 描述 |
---|---|
len(x) | 长度,返回字符串x的长度 |
str(x) | 任意类型x所对应的字符串形式 |
hex(x) 或 oct(x) | 整数x的十六进制或八进制小写形式字符串 |
chr(u) | x为Unicode编码,返回其对应的字符 (源于:character) |
ord(x) | x为字符,返回其对应的Unicode编码 (源于:ordinal) |
- 字符串操作方法
方法及使用 | 描述 |
---|---|
str.lower() 或 str.upper() | 返回字符串的副本,全部字符小写/大写 “AbCdEfGh”.lower() 结果为 “abcdefgh” |
str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成 “A,B,C”.split(“,”) 结果为 [‘A’,’B’,’C’] |
str.count(sub) | 返回子串sub在str中出现的次数 “an apple a day”.count(“a”) 结果为 4 |
str.replace(old, new) | 返回字符串str副本,所有old子串被替换为new “python”.replace(“n”,”n123.io”) 结果为 “python123.io” |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选 “python”.center(20,”=”) 结果为 ‘=======python=======’ |
str.strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符 “= python= “.strip(“ =np”) 结果为”ytho” |
str.join(iter) | 在iter变量除最后元素外每个元素后增加一个str “,”.join(“12345”) 结果为 “1,2,3,4,5” #主要用于字符串分隔等 |
字符串格式化
%方法:
1
2
3
4>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'如果只有一个
%?
,括号可以省略。常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
用`%%`来表示一个`%`
str.format()(python2.6增加)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#通过位置
'你好,我是{0}, 很高兴为您服务。您的资料显示您今年{1}岁'.format('小娜',18)
'你好,我是{}, 很高兴为您服务。您的资料显示您今年{}岁'.format('小娜',18)
'你好,我是{1}, 很高兴为您服务。您的资料显示您今年{0}岁。{1}与你同岁'.format(18, '小娜')
#通过关键字参数
'你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(name='小娜',age=18)
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return 'This guy is {self.name},is {self.age} old'.format(self=self)
#通过对象属性
class AssignValue(object):
def __init__(self, value):
self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
#通过映射 list
xNa = ['小娜', 18]
'你好,我是{0[0]}, 很高兴为您服务。您的资料显示您今年{0[1]}岁'.format(xNa)
#通过映射 dict
xNa = {'name':'小娜', 'age':18}
'你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(**xNa)
# 可以使用大括号 **{}** 来转义大括号
"{} 对应的位置是 {{0}}".format("runoob")槽内部的格式化配置:{ <参数标识> <格式控制标记>}
格式控制标记
: | 填充 | 对齐 | 宽度 | , | . | 类型 |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐 >右对齐 ^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b,o,d,x,X 浮点数类型e,E,f 字符类型c,s |
f-string/F字符串(python3.6增加)
==当中文字符宽度不够时,采用西文字符填充;中西文字符占用宽度不同。==
中文的空格chr(12288)
字节串
- 由0个或多个字节组成的有序序列,每字节对应值为0-255
- 字节串由前导符b或B与一对单引号/双引号或三个单引号/三个双引号表示,如:b”a\xf6” ,b’’’abcdef
1234567890 ‘’’ - 0-255间非可打印字符用\xNN方式表示,N是一个十六进制字符
- 索引功能,与字符串相同
- 切片功能,与字符串相同
- 字节串操作符,与字符串相同
- 字节串处理函数,支持len()
- 字节串处理方法,与字符串类似,参数必须也是字节串。
如果要在网络上传输,或者保存到磁盘上,就需要把
str
变为以字节为单位的bytes
。bytes
的每个字符都只占用一个字节。Unicode表示的
str
通过encode()
方法可以编码为指定的bytes
1
2'ABC'.encode('ascii') == b'ABC'
'中文'.encode('utf-8') == b'\xe4\xb8\xad\xe6\x96\x87'纯英文的
str
可以用ASCII
编码为bytes
,内容是一样的含有中文的
str
可以用UTF-8
编码为bytes
。含有中文的str
无法用ASCII
编码,因为中文编码的范围超过了ASCII
编码的范围,Python会报错。在
bytes
中,无法显示为ASCII字符的字节,用\x##
显示。从网络或磁盘上读取了字节流,读到的数据是
bytes
。bytes
变为str
,需要用decode()
1
2b'ABC'.decode('ascii') =='ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') == '中文'如果
bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:1
b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') == '中'